package com.pokermind.model.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

/**
 * 极简AI决策响应 - V4.23优化版
 * 
 * V4.23变更：
 * - 添加@JsonInclude(NON_NULL)，不输出null字段
 * 
 * V4.13变更：
 * - 移除thought_process字段，简化JSON结构
 * - reasons字段强化：专业总结，包含关键逻辑（手牌类型、位置、EV对比、策略意图）
 * 
 * V4.1变更：
 * - hand_strength从对象改为Double数值（0-1），表示胜率
 * - 增加position, seat_number, street字段（便于客户端识别上下文）
 * 
 * @author PokerMind Team
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SimpleAIDecision {
    
    /**
     * 推荐行动: fold | check | call | raise
     * 注意：移除了"bet"，统一用"raise"表示主动下注
     */
    private String action;
    
    /**
     * 下注量（具体筹码金额，整数）
     */
    private String size;
    
    /**
     * 简洁理由（通俗易懂，30-50个汉字）
     * V4.8: 保留 reason 以向后兼容，同时添加 reasons
     */
    private String reason;
    
    /**
     * 简洁理由（通俗易懂，30-50个汉字）
     * V4.8: 与 reason 相同，为了匹配新 Prompt 格式
     */
    private String reasons;
    
    /**
     * 置信度（0-1）
     */
    private Double confidence;
    
    /**
     * 手牌强度（V4.1优化：改为数值）
     * 取值范围：0-1，表示当前胜率
     * 如：0.94 表示 94% 胜率
     */
    @JsonProperty("hand_strength")
    private Double handStrength;
    
    /**
     * 玩家位置（BTN/SB/BB/UTG/MP/CO）
     */
    private String position;
    
    /**
     * 座位号（1-9）
     */
    @JsonProperty("seat_number")
    private Integer seatNumber;
    
    /**
     * 当前街道（preflop/flop/turn/river）
     */
    private String street;
}

 